package cn.gov.cus.rmftquartz.service;

import cn.gov.cus.rmftquartz.entity.RmftHitResultVo;
import cn.gov.cus.rmftquartz.enums.RuleEffectTypeEnum;
import cn.gov.cus.rmftquartz.mappers.oracle.RuleKPIMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author wxming.
 * @date 2018/3/9.
 */
@Service
public class RuleKPIService {

    @Autowired
    private RuleKPIMapper ruleKPIMapper;

    public List<RmftHitResultVo> doSearchRuleKPI(RmftHitResultVo manifestHitVo){
        List<RmftHitResultVo> rmftHitResultVoList = ruleKPIMapper.doSearchRule(manifestHitVo);

        String begin = manifestHitVo.getBegin();
        String end = manifestHitVo.getEnd();
        for (RmftHitResultVo vo:rmftHitResultVoList){
            vo.setBegin(begin);
            vo.setEnd(end);
            //一个一个去查询每个规则在时间段内命中的数量
            long all=ruleKPIMapper.doSearchOneByOne(vo);

            //规则生效时间
            String startDate = vo.getStartDate().substring(0,19);
            vo.setStartDate(startDate);
            //规则终止时间
            String endDate = (vo.getEndDate()==null?null:vo.getEndDate().substring(0,19));

            if(begin==null && end==null){
                vo.setBegin(startDate);
                vo.setEnd(endDate);
                //此处的时间关系在获取满足时间条件下的规则时已经处理过一部分逻辑，这块处理时间的代码只需处理满足之前条件之后的逻辑就行。
            }else if(begin==null){
                vo.setBegin(startDate);
                //endDate<end
                if(endDate!=null && endDate.compareTo(end)<0){
                    vo.setEnd(endDate);
                }
                //sql.WHERE(" (TO_CHAR(REAL_END_DATE,'yyyy-MM-dd HH:mm:ss') >= "+"\'"+begin+"\' or REAL_END_DATE is null )");
            }else if(end==null){
                //begin<startDate
                if(begin.compareTo(startDate)<0){
                    vo.setBegin(startDate);
                }
                vo.setEnd(endDate);
            }else{
                //begin<startDate
                if(begin.compareTo(startDate)<0){
                    vo.setBegin(startDate);
                }
                //endDate<end
                if(endDate!=null && endDate.compareTo(end)<0){
                    vo.setEnd(endDate);
                }
            }
            //判断是舱单还是报关单的规则，分别去不同表里求总数。
            long num=0;
            //报关单的
            if(RuleEffectTypeEnum.EntryType.getAlias().equals(vo.getRuleHit().substring(7,8))){
                num=ruleKPIMapper.doSearchCountEntry(vo);
                //舱单的
            }else if(RuleEffectTypeEnum.ManifestType.getAlias().equals(vo.getRuleHit().substring(7,8))){
                num=ruleKPIMapper.doSearchCountManifest(vo);
            }
            String hitPercent="0";
            if(num!=0){
                Float result = Float.valueOf(all*100)/Float.valueOf(num);
                int b =(int)Math.round(result*100);
                float r=(float)b/100;
                hitPercent=r+"";
            }
            vo.setHitNum(all+"");
            vo.setHitPercent(hitPercent);
        }
        return rmftHitResultVoList;
    }
}
